/**
 * 状态机 + 树形DP问题
 * 状态表示:
    f(i, 0)：第i号结点被他的父结点安排的守卫看住的方案数
    f(i, 1)：第i号结点被他的子结点安排的守卫看住的方案数
    f(i, 2)：第i号结点自己安排守卫看住的方案数
 * 状态计算:(j是i的子结点)
    f(i, 0) = sum{min(f(j,1), f(j,2))}
        i是被他父结点看住的，那他的子结点要么自己看自己，要么被自己的子结点看住
    f(i, 1) = min{w(k) + f(k, 2) + sum{min(f(j,1), f(j,2))}}
        i如果是被自己点看住的，那么就要枚举他是被哪个子结点看住的所有方案，对所有方案求最小值
        这里的sum不包括j==k的情况，因此需要手动额外减去
    f(i, 2) = sum{min(f(j,0), f(j,1), f(j,2))} + w(u)
        i是被自己看住的，那他的子结点可以被父结点看住，可以自己看自己，也可以被自己的子结点看住

作者：彩色铅笔
链接：https://www.acwing.com/solution/content/66594/
来源：AcWing
著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
*/

#include <cstring>
#include <iostream>

using namespace std;
const int N = 1510;
int n;
int h[N], w[N], e[N], ne[N], idx;
// 0: 被父节点观察
// 1: 被子节点观察
// 2: 被自己观察
int f[N][3];
bool not_root[N];

void add(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx++; }

void dfs(int u) {
  f[u][0] = 0;
  f[u][1] = 1e9;
  f[u][2] = w[u];
  for (int i = h[u]; ~i; i = ne[i]) {
    int j = e[i];
    dfs(j);
    // 父节点被它的父节点观察，子节点不能被父节点观察观察
    f[u][0] += min(f[j][1], f[j][2]);
    // 父节点被自身观察，子节点三种状态均可
    f[u][2] += min(min(f[j][0], f[j][1]), f[j][2]);
  }
  for (int i = h[u]; ~i; i = ne[i]) {
    int j = e[i];
    // 父节点被子节点观察，试试被哪个子节点观察代价更低
    f[u][1] = min(f[u][1], f[u][0] + f[j][2] - min(f[j][1], f[j][2]));
  }
}

int main() {
  memset(h, -1, sizeof h);
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    int id, cost, cnt;
    cin >> id >> cost >> cnt;
    w[id] = cost;
    while (cnt--) {
      int ver;
      cin >> ver;
      add(id, ver);
      not_root[ver] = true;
    }
  }
  int root = 1;
  while (not_root[root]) ++root;
  dfs(root);
  cout << min(f[root][1], f[root][2]) << endl;
  return 0;
}
